NDK 交叉编译工具链使用

您所在的位置:网站首页 ndk 编译 apk NDK 交叉编译工具链使用

NDK 交叉编译工具链使用

2023-08-21 20:12| 来源: 网络整理| 查看: 265

NDK 已经为我们提供了交叉编译工具链,用来编译第三方 C/C++ 库到 Android 中使用,比如 FFmpeg、x264、RTMPDump 等等。如何使用 ndk 工具也看个人兴趣,你可以通过下载好 ndk 工具后,通过指定工具链路径来完成。也可以使用 ndk 提供的 make_standalone_toolchain.py 脚本来生成我们想要的工具链,这个好处是它会将你要想要的工具都拷贝到指定目录,比较方便查找。

NDK 目录介绍

首先我们下载 android-ndk-r17c 目录,没有的可到官网下载。截图如下:

我们在使用交叉编译工具链的时候都用到 toolchains、sysroot、platforms。 toolchains ,一看名字就知道这个是关于编译工具链的。它针对不同 cpu 架构都提供了编译工具链。

值得说明的是,在 ndk-r18 就不再支持 mips 架构了。你要编译 arm 架构,你可以选择 32 位的 arm-linux-androideabi-4.9 或者 64 位的 aarch64-linux-android-4.9,目前主流手机 cpu 已经慢慢向 64 位慢进了,并且在新版本的 Android Studio3.5 中也会提示你最好包含 armeabi-v7a 和 arm64-v8a,如果你不加入 64 位支持,你的应用就没办法通过谷歌应用市场审核, 有图作证。

这里选择 arm-linux-androideabi-4.9 进入

很多人在网上拿着别人的配置就一通编译,也不看看别人是什么平台,有的人是 Mac OS 有的是 Linux,所以要注意一下这里的使用啦!继续跟进去看看

进入到这个目录下,也就是我们需要的所有交叉编译工具啦!

现在来看 platforms 目录

这里列出了 Android 各平台需要依赖的的库,随便选择一个进入。

从上面列表看到 libc、libz、libandroid、libOpenSLES 等等,这些就是系统提供给我们的库。或许大家没有用过, 不过在 NDK 开发或多或少都会用到的。

在比较老的 ndk 版本没有 sysroot 目录,这个目录存放的是系统库依赖的头文件,而老的版本则是在各平台下 usr 目录下有 include 目录。到后面比较新的版本就移到了 sysroot。具体是哪一个版本我也记不清了,读者可以自行求证。

选择 include 目录进入,如下列出了系统库需要头文件。

生成独立工具链

NDK 为我们提供了 make_standalone_toolchain.py 脚本来生成编译工具链。它的目录在 build/tools/ 下,使用也比较简单

--arch 指定 cpu 架构 --api 指定系统版本 --install-dir 生成的编译工具链目录 $NDK/build/tools/make_standalone_toolchain.py \ --arch arm --api 21 --install-dir /tmp/my-android-toolchain

下面我生成了一个,我们看看它的文件结构。

你可以看到已经为我们生成了 arm-linux-androideabi, 在 sysroot 下包含了系统提供的库以及头文件。在 bin 目录下包含了交叉编译工具,比如 clang、gcc、ar、as、nm、strip 等等。主要做的工作就是将原先在 ndk 目录下的各目录结构归纳到一个目录。

具体的目录拷贝过程: 1. $NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/* -> 工具链安装目录/ 2.$NDK/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib -> 工具链安装目录/sysroot/usr/

特别提醒: 在 NDK 19 开始就不需要使用独立工具链了, 在 toolchains/llvm/ 下已经提供好了编译工具, 读者自行去下载进入目录看看,和独立工具链编译出来的结构非常类似,不过它比较全的是针对不同平台版本

好了,现在就已经介绍完了 NDK 提供的交叉编译工具。知道了原理后,读者可以尝试去编译下第三方 C/C++ 库的来练练手。比如 x264。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3